]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Fix JSObject leak in workspace.js
authorMaxim Ermilov <zaspire@rambler.ru>
Wed, 17 Mar 2010 22:23:32 +0000 (01:23 +0300)
committerMaxim Ermilov <zaspire@rambler.ru>
Thu, 18 Mar 2010 00:27:42 +0000 (03:27 +0300)
https://bugzilla.gnome.org/show_bug.cgi?id=612318

js/ui/dnd.js
js/ui/workspace.js

index 4ce2a0bf7193cddee8c420c49023b43006fd83d3..bfd30104d27ae34c17ba492472882be6b830b9a8 100644 (file)
@@ -37,6 +37,10 @@ _Draggable.prototype = {
         if (!manualMode)
             this.actor.connect('button-press-event',
                                Lang.bind(this, this._onButtonPress));
+
+        this.actor.connect('destroy', Lang.bind(this, function() {
+            this.disconnectAll();
+        }));
         this._onEventId = null;
 
         this._buttonDown = false; // The mouse button has been pressed and has not yet been released.
index 0b5599011251c0744703fd8b8dca9c846736a23a..522c251c2961b72f061c1374a6ff7004592d3dec 100644 (file)
@@ -199,8 +199,12 @@ WindowClone.prototype = {
     },
 
     _onDestroy: function() {
+        this.metaWindow._delegate = null;
+        this.actor._delegate = null;
         if (this._zoomLightbox)
             this._zoomLightbox.destroy();
+
+        this.disconnectAll();
     },
 
     _onEnter: function (actor, event) {
@@ -1370,8 +1374,8 @@ Workspace.prototype = {
             Mainloop.source_remove(this._repositionWindowsId);
             this._repositionWindowsId = 0;
         }
-        Main.overview.connect('hidden', Lang.bind(this,
-                                                  this._doneLeavingOverview));
+        this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this,
+                                                                           this._doneLeavingOverview));
 
         // Position and scale the windows.
         for (let i = 1; i < this._windows.length; i++) {
@@ -1479,6 +1483,10 @@ Workspace.prototype = {
     },
 
     _onDestroy: function(actor) {
+        if (this._overviewHiddenId) {
+            Main.overview.disconnect(this._overviewHiddenId);
+            this._overviewHiddenId = 0;
+        }
         Tweener.removeTweens(actor);
 
         this._metaWorkspace.disconnect(this._windowAddedId);
@@ -1493,6 +1501,7 @@ Workspace.prototype = {
         // the desktop window, which is never reparented
         for (let w = 1; w < this._windows.length; w++)
             this._windows[w].destroy();
+        this._windows = [];
     },
 
     // Sets this.leavingOverview flag to false.